<?php

/**
 * registropc actions.
 *
 * @package    comande
 * @subpackage registropc
 * @author     Your name here
 * @version    SVN: $Id: actions.class.php 23810 2009-11-12 11:07:44Z Kris.Wallsmith $
 */
class registropcActions extends sfActions
{
 /**
  * Executes index action
  *
  * @param sfRequest $request A request object
  */


  public function executeIndex(sfWebRequest $request)
  {

      // recibe parametros


  }

   public function executeAjax_registro_pcs(sfWebRequest $request)
  {
       $request->setRequestFormat('json');
       //recibo parametros del usuario
       $nombrepc = $request->getParameter('nombrepc');
       $nombreusu = $request->getParameter('nomusu');
       $email = $request->getParameter('email');
       $grupo_trabajo = $request->getParameter('grupo_id');

       $tiempo_actividad = $request->getParameter('tiempo_actividad');
       $tiempo_de_envio_datos = $request->getParameter('tiempotomainformacion');

       $fecha = time("d/m/a");

       //validadores
      $caracteres_validador =new sfValidatorRegex(array('pattern' => '/^\w+$/'));
      $cadenas_validador = new sfValidatorString(array('required' => true));
      $email_validador = new sfValidatorEmail();
      $validador_ruc = new sfValidatorString(array('max_length' => 12));
        $contador = 4;
        //nombre pc
      try{
            $cadenas_validador->clean($nombrepc);
       }catch(sfValidatorError $e){
        $contador--;
       }
      //nombre usuario
      try{
            $cadenas_validador->clean($nombreusu);
       }catch(sfValidatorError $e){
          $contador--;
      }
        //Email
        try{
        $email_validador->clean($email);
        }catch(sfValidatorError $e){
              $contador--;
              }
        //grupo de trabajo
        try{
            $cadenas_validador->clean($grupo_trabajo);
            }catch(sfValidatorError $e){
                  $contador--;
                  }
if($contador == 4){
  try{

               //busco si existe registrado en otro grupo de trabajo

               $criterio_busqueda = new Criteria();
               $criterio_busqueda->add(UsuariosMonitoreadosPeer::EMAIL, $email);
               $criterio_busqueda->add(UsuariosMonitoreadosPeer::ESTADO, "1");

               $objeto_encontrado = UsuariosMonitoreadosPeer::doSelectOne($criterio_busqueda);
               if(is_object($objeto_encontrado)){
                   $this->mensaje = "Usuario No disponible, se encuentra en un grupo de trabajo";
               }else{
                  //obtengo el id local de usuario lider.
                   $id_sesion_local_user = $this->getUser()->getAttribute('ses_user_id');


  //send email
            try{

            //obtengo el usuario
                $new_busqueda = new Criteria();
                $new_busqueda->add(UsuarioPeer::ID, $id_sesion_local_user);
                $obj_usuario = UsuarioPeer::doSelectOne($new_busqueda);

                $message = $this->getMailer()->compose();
                $message->setSubject('Comande-Registro-Usuario');
                $message->setTo($email);
                $message->setFrom('comande@grafilab.com');
                $html = $this->getPartial('usuario/mensaje_json', array(
                'password'=>$email,
                'nombre_boss'=>$obj_usuario->getNombres(),
                'apellido_boss'=>$obj_usuario->getApellidos(),
                'empresa' => $obj_usuario->getEmpresa()));
                $message->setBody($html, 'text/html');
                $this->getMailer()->send($message);
            }catch(Exception $e){
     $this->mensaje = "Fracaso al enviar la solicitud al email";
}

try{
               //guardo la solicitud


               $new_solicitud = new Solicitudes();
               $new_solicitud ->setUsuarioId($id_sesion_local_user);  //-->QUIEN LE ENVIA SOLICITUD
               $new_solicitud ->setEmailUser($email); //-> email de usuario monitoreado
               $new_solicitud-> setFechaCreate($fecha); //-> fecha del envio de la solicitud
               $new_solicitud->setEstado("0"); //-> "0" estado de la solicitud no aceptada
                                                //-> "1" estado de la solicitud aceptada
                                                //-> "2" estado de la solicitud rechazada
               $new_solicitud->save();
                }catch(Exception $e){
                     $this->mensaje = "Fracaso al registrar la Solicitud";
                }

                try{

                //registro el usuario
                        $new_usuario_monitoreado = new UsuariosMonitoreados();
                        $new_usuario_monitoreado ->setNombrePc($nombrepc);
                        $new_usuario_monitoreado ->setNombreUsuario($nombreusu);
                        $new_usuario_monitoreado ->setEmail($email);
                       // json
                        // recibo parametros de la configuracion
                        $configuracion_general =  json_encode(array(
                                "tiempo_sesion" =>  $tiempo_actividad,
                                "tiempo_muestra"  => $tiempo_de_envio_datos
                             ));

                        $new_usuario_monitoreado->setFlagsConfiguracion($configuracion_general);
                        $new_usuario_monitoreado->setEstado("0"); //--> "0" es cuando el usuario todavia no acepta pertenecer al grupo de trabajo
                                                                  //---> "1" es cuando el usuario acepto pertenecer al grupo de trabajo

                        $new_usuario_monitoreado->setGruposTrabajoId($grupo_trabajo);
                        $new_usuario_monitoreado->save();

                }catch(Exception $e){
                     $this->mensaje = "Fracaso al registrar Usuario monitoreado";
                }
        $this->mensaje = "Registrado con exito";
               }



}catch(Exception $e){
     $this->mensaje = "Fracaso al registrar Usuario";
}

}else{
    $this->mensaje = "Los datos incorrectos!!";
}

  }
  //servicio ajax que permite ver las configuraciones por pc y demas opciones

   public function executeAjax_mostrar_configuracion_pcs(sfWebRequest $request)
  {


       $id_usuario_pc = $request->getParameter('userPc');
       $criteria_bus = new Criteria();
       $criteria_bus->add(UsuariosMonitoreadosPeer::USUARIO_ID,$id_usuario_pc);
       $cantidad_usu = UsuariosMonitoreadosPeer::doCount($criteria_bus);

       $lista_horas_inicio = null;
       $lista_horas_fin    = null;

       if($cantidad_usu>0)
       {

         $objeto_usuario_pc = UsuariosMonitoreadosPeer::doSelectOne($criteria_bus);
         /* Muestro las horas de inicio y fin de sesion */
         //BUSCO EN LA TABLA DE SESIONES
         $fecha= date("Y-m-d");
         $criteria_bus->clear();
         $criteria_bus->add(SessionStartTimePeer::USER_MONITOREADO_ID,$objeto_usuario_pc->getId() );
         $criteria_bus->add(SessionStartTimePeer::FECHA_SESION, $fecha);
         $obj_sesion_usuario = SessionStartTimePeer::doSelectOne($criteria_bus);

            if(is_object($obj_sesion_usuario))
            { //----> si existe datos
                //////// HORA DE INICIO
                if($obj_sesion_usuario->getHoraInicio() != null)
                { //---> si existe hora de inicio

                      $lista_horas_inicio = array();
                      $obj = json_decode($obj_sesion_usuario->getHoraInicio());
                      foreach ($obj->{'1'} as $row)
                      {
                           foreach($row as $file)
                           {
                                    $lista_horas_inicio[] = $file;
                           }
                      }
                }

                /////// HORA DE FIN
                if($obj_sesion_usuario->getHoraFin() != null)
                { //---> si existe hora de fin
                    $lista_horas_fin = array();
                    $obj = json_decode($obj_sesion_usuario->getHoraFin());
                      foreach ($obj->{'2'} as $row)
                      {
                           foreach($row as $file)
                           {
                                    $lista_horas_fin[] = $file;
                           }

                       }
                }
            }
       }

        $this->listahorasinicio = $lista_horas_inicio;
        $this->listahorasfin    = $lista_horas_fin;

  }
  //actualiza la configuracion general del usuario
    public function executeAjax_actualizar_configuracion_usuario_pc(sfWebRequest $request)
  {
    $request->setRequestFormat('json');
    //recibo parametros
    $tiempo_actividad_conf = $request->getParameter('tiempo_act_conf');
    $tiempo_muestra_conf = $request->getParameter('tiempo_mues_conf');
    $id_usuario_monitoreado = $request->getParameter('codigo_usuario_monitoreado');

    //primero se hace la busqueda del usuario por el id
    $criterio_bus = new Criteria();
    $criterio_bus->add(UsuariosMonitoreadosPeer::USUARIO_ID, $id_usuario_monitoreado);
    $criterio_bus->add(UsuariosMonitoreadosPeer::ESTADO, "1");
    $cantidad_obj = UsuariosMonitoreadosPeer::doCount($criterio_bus);
    if($cantidad_obj>0){
    try{
    $objeto_encontrado = UsuariosMonitoreadosPeer::doSelectOne($criterio_bus);

    //guardo como json
    $new_conf_usuario =  json_encode(array(
    "tiempo_sesion" =>  $tiempo_actividad_conf,
                "tiempo_muestra"  =>  $tiempo_muestra_conf
             ));
      $objeto_encontrado->setFlagsConfiguracion($new_conf_usuario);
      $objeto_encontrado->save();
      $this->mensaje = "Exito al Actualizar!";

    }catch(Exception $e){
       $this->mensaje = "Error interno al actualizar usuario";
    }
    }else{
      $this->mensaje = "No se encontro a usuario!";
    }


  }
  public function executeAjax_resultados_monitoreo(sfWebRequest $request)
  {
       //recibo parametros
       $enteros_validador = new sfValidatorInteger(array('min' => 1, 'max' => 999999999999));
       $id_usuario_pc = $request->getParameter('idusuario_pc');
       $contador=1;
       try{
            $enteros_validador->clean($id_usuario_pc);
       }catch(sfValidatorError $e)
       {
            $contador--;
       }

       if($contador == 1)
       {
            $recurso = new myLib();
            $criteria_bus = new Criteria();
            $criteria_bus->add(UsuarioPeer::ID,$id_usuario_pc);
            $ubj_usuario_pc = UsuarioPeer::doSelectOne($criteria_bus);

            $recurso = new myLib();
            $fecha_local = $recurso->executeRetornaFechaLocal();
            $criteriaConsumo = new Criteria();
      $criteriaConsumo->add(DetalleConsumoUsuarioPeer::USUARIO_ID, $ubj_usuario_pc->getId());
      $criteriaConsumo->add(DetalleConsumoUsuarioPeer::FECHA, '%'.$fecha_local.'%', Criteria::LIKE );
      $cantidad_reg_detalle = DetalleConsumoUsuarioPeer::doCount($criteriaConsumo);
      if($cantidad_reg_detalle >0)
            {
                $detalle_cosumo = DetalleConsumoUsuarioPeer::doSelectOne($criteriaConsumo);
                $cantidad_usu = UsuarioPeer::doCount($criteria_bus);
                if($cantidad_usu>0)
                {
                     $serviceReportes = new serviceReportes();
                     $xmlElement = new SimpleXMLElement($detalle_cosumo->getArrayConsumo());

                     $arrayTable = $serviceReportes->dataReportingTableAplication($xmlElement);
                     $this->lista_consumo =$arrayTable['array'];
                     $array = $serviceReportes->dataReportingTorta($xmlElement);
                     $this->lista_graficos =  $array['array'];
                     $criteria_bus->clear();
                     $criteria_bus->add(UsuariosMonitoreadosPeer::USUARIO_ID, $id_usuario_pc );
                     $objeto_usuario_pc = UsuariosMonitoreadosPeer::doSelectOne($criteria_bus);
                     $this->usuario_pc = $objeto_usuario_pc;

                     //********** MOSTRAR HORAS DE LOGUEO *************//
                     $criteria_bus->clear();
                     $criteria_bus->add(SessionStartTimePeer::USER_MONITOREADO_ID, $objeto_usuario_pc->getId());
                     $criteria_bus->add(SessionStartTimePeer::FECHA_SESION,$fecha);
                     $sesion = SessionStartTimePeer::doSelectOne($criteria_bus);
                     if(is_object($sesion ))
                     {
                         // trabajar con el json
                         // verifico si hay hora de inicio
                         $lista_horas_inicio = array();
                         $lista_horas_fin = array();
                         if($sesion->getHoraInicio()!=null)
                         {

                                $obj = json_decode($sesion->getHoraInicio());
                                  foreach ($obj->{'1'} as $row){
                                       foreach($row as $file){
                                                $lista_horas_inicio[] = $file;
                                            }
                                    }

                         }
                         else
                         {
                             $lista_horas_inicio = null;
                         }
                         // verifico si hay hora de fin
                         if($sesion->getHoraFin()!=null)
                         {
                                $obj = json_decode($sesion->getHoraFin());
                                  foreach ($obj->{'2'} as $row){
                                       foreach($row as $file){
                                                $lista_horas_fin[] = $file;
                                            }
                                    }
                         }
                         else
                         {
                             $lista_horas_fin = null;

                         }
                          $resultado=$recurso->executeCalcularTiempoSesion($fecha, $lista_horas_inicio, $fecha, $lista_horas_fin);
                          $this->resul_tiempo_conectado = $resultado;
                     }
                     else
                     {
                          $this->resul_tiempo_conectado = null;
                     }
               }
               else
               {
                    $this->usuario_pc = null;
                    $this->resul_tiempo_conectado = null;
               }
            }


    }
    else
    {
         $this->usuario_pc = null;
         $this->resul_tiempo_conectado = null;
    }

  }

}
